package com.example.demo.tree;

/**
 * Created by 蔡超 on 2018/10/9.
 */
public interface BinaryTreeNodeInterface<T> {
    T getData();//返回结点的数据部分
    void setData(T newData);//设置结点的数据域的值

    BinaryTreeNodeInterface<T> getLeftChild();//获取结点的左孩子
    BinaryTreeNodeInterface<T> getRightChild();//获取结点的右孩子

    void setLeftChild(BinaryTreeNodeInterface<T> leftChild);//设置结点的左孩子为指定结点
    void setRightChild(BinaryTreeNodeInterface<T> rightChild);//设置结点的右孩子为指定结点

    boolean hasLeftChild();//判断结点是否有左孩子
    boolean hasRightChild();//判断结点是否有右孩子

    boolean isLeaf();//检查结点是否是叶子结点

    int getNumberOfNodes();//计算以该结点为根的子树的结点数目
    int getHeight();//计算以该结点为根的子树的高度
    BinaryTreeNodeInterface<T> copy();//复制以该结点为根的子树

    void preOrder(BinaryTreeNodeInterface<T> binaryTreeNodeInterface);//前序遍历递归

    void midOrder(BinaryTreeNodeInterface<T> binaryTreeNodeInterface);

    void sufOrder(BinaryTreeNodeInterface<T> binaryTreeNodeInterface);

    void preOrderByStack(BinaryTreeNodeInterface<T> binaryTreeNodeInterface);

}
